From 9dfba95f095667b425a8f676c48c5749ab6c4c18 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Fri, 20 Aug 2010 11:50:39 +0200 Subject: [PATCH] GtkCssProvider: Add gtk_css_provider_load_from_path() --- gtk/gtkcssprovider.c | 60 ++++++++++++++++++++++++++++++++++++++++++++ gtk/gtkcssprovider.h | 3 +++ 2 files changed, 63 insertions(+) diff --git a/gtk/gtkcssprovider.c b/gtk/gtkcssprovider.c index c9c5a17aed..f9780c2420 100644 --- a/gtk/gtkcssprovider.c +++ b/gtk/gtkcssprovider.c @@ -1686,6 +1686,45 @@ gtk_css_provider_load_from_file (GtkCssProvider *css_provider, return TRUE; } +gboolean +gtk_css_provider_load_from_path (GtkCssProvider *css_provider, + const gchar *path, + GError **error) +{ + GtkCssProviderPrivate *priv; + GError *internal_error = NULL; + gchar *data; + gsize length; + + g_return_val_if_fail (GTK_IS_CSS_PROVIDER (css_provider), FALSE); + g_return_val_if_fail (path != NULL, FALSE); + + priv = css_provider->priv; + + if (g_file_get_contents (path, &data, &length, + &internal_error)) + { + g_propagate_error (error, internal_error); + return FALSE; + } + + if (priv->selectors_info->len > 0) + g_ptr_array_remove_range (priv->selectors_info, 0, priv->selectors_info->len); + + g_free (priv->filename); + priv->filename = g_strdup (path); + + css_provider_reset_parser (css_provider); + priv->scanner->input_name = priv->filename; + g_scanner_input_text (priv->scanner, data, (guint) length); + + parse_stylesheet (css_provider); + + g_free (data); + + return TRUE; +} + GtkCssProvider * gtk_css_provider_get_default (void) { @@ -1762,5 +1801,26 @@ gtk_css_provider_get_default (void) return provider; } +GtkCssProvider * +gtk_css_provider_get_named (const gchar *name) +{ + static GHashTable *themes = NULL; + GtkCssProvider *provider; + + if (G_UNLIKELY (!themes)) + themes = g_hash_table_new (g_str_hash, g_str_equal); + + provider = g_hash_table_lookup (themes, name); + + if (!provider) + { + + + g_hash_table_insert (themes, g_strdup (name), provider); + } + + return provider; +} + #define __GTK_CSS_PROVIDER_C__ #include "gtkaliasdef.c" diff --git a/gtk/gtkcssprovider.h b/gtk/gtkcssprovider.h index 18364eaea8..2b8dd9dcfe 100644 --- a/gtk/gtkcssprovider.h +++ b/gtk/gtkcssprovider.h @@ -56,6 +56,9 @@ gboolean gtk_css_provider_load_from_data (GtkCssProvider *css_provider, gboolean gtk_css_provider_load_from_file (GtkCssProvider *css_provider, GFile *file, GError **error); +gboolean gtk_css_provider_load_from_path (GtkCssProvider *css_provider, + const gchar *path, + GError **error); GtkCssProvider * gtk_css_provider_get_default (void); -- 2.30.2